package boole.application;

import boole.circuit.CircuitFerme;
import boole.circuit._Composant;
import boole.circuit.base.And;
import boole.circuit.base.Interrupteur;
import boole.circuit.base.Led;
import boole.circuit.base.*;
import java.util.HashMap;

/**
 *
 * @author Rémi PIOTAIX <remi.piotaix@gmail.com>
 */
public class main {

    public static void main(String[] args) {

        /*
         * Petit code de test d'un AND. Changer la valeur de l'interrupteur en
         * passant 'false' au conctructeur pour changer la valeur du résultat.
         *
         * interupteur -> | AND|----> (LED)
         *  VCC --------> |____|
         */
        System.out.println("Test1: test d'un and.");
        Vcc vcc = new Vcc();
        Interrupteur interrupteur = new Interrupteur(true);
        And and = new And();
        Led led = new Led();
        System.out.println("Creation ok, on va les lier.");
        vcc.connectSortieTo(1, and, 1);
        interrupteur.connectSortieTo(1, and, 2);
        and.connectSortieTo(1, led, 1);
        System.out.println("Liaison ok, lancement du calcul");

        HashMap<Integer, _Composant> operateurs = new HashMap();
        operateurs.put(1, led);
        operateurs.put(2, and);
        operateurs.put(3, vcc);
        operateurs.put(4, interrupteur);
        CircuitFerme cf = new CircuitFerme(operateurs);
        cf.calcul();

        System.out.print("Resultat: ");
        System.out.println(led.getEntree(1).getValeur() ? "true" : "false");


        /*
         * Petit code de test d'un NOT et d'un OR.
         *
         * interupteur -> | OR|--->|NOT|----> (LED)
         *  VCC --------> |___|
         */
        // objets crées.
        Not not = new Not();
        Or or = new Or();
        Vcc vcc2 = new Vcc();
        Led led2 = new Led();
        Interrupteur interrupteur2 = new Interrupteur(false);
        //liaisons.
        System.out.println("\nTest2: maintenant, on remplace le and par un or suivi d'un not");
        vcc2.connectSortieTo(1, or, 1);
        interrupteur2.connectSortieTo(1, or, 2);
        or.connectSortieTo(1, not, 1);
        not.connectSortieTo(1, led2, 1);
        System.out.println("Liaison ok, lancement du calcul");

        HashMap<Integer, _Composant> operateurs2 = new HashMap();
        operateurs2.put(1, led2);
        operateurs2.put(2, or);
        operateurs2.put(3, vcc2);
        operateurs2.put(4, or);
        operateurs2.put(5, interrupteur2);
        CircuitFerme cf2 = new CircuitFerme(operateurs2);
        cf2.calcul();
        
        //affichage du résultat.
        System.out.print("Resultat: ");
        System.out.println(led2.getEntree(1).getValeur() ? "true" : "false");

        /*
         * test changeValue de l'interupteur:
         *
         * not interupteur -> | OR|--->|NOT|----> (LED)
         *  VCC ------------> |___|
         */
        interrupteur.changeValue();
        System.out.print("\nTest3: changeValue de l'interupteur \nResultat: ");
        System.out.println(led.getEntree(1).getValeur() ? "true" : "false");
    }
}
